package com.example.musicaiap.ui.playlist

import com.example.musicaiap.domain.model.Playlist
import com.example.musicaiap.domain.model.Song
import com.example.musicaiap.mvi.base.UiEffect
import com.example.musicaiap.mvi.base.UiIntent
import com.example.musicaiap.mvi.base.UiState

/**
 * 播放列表的MVI契约
 */
object PlaylistContract {
    
    /**
     * 播放列表UI状态
     */
    data class State(
        val isLoading: Boolean = true,
        val error: String? = null,
        val playlist: Playlist? = null,
        val songs: List<Song> = emptyList(),
        val currentPlayingSong: Song? = null,
        val isPlaying: Boolean = false,
        val currentPosition: Long = 0,
        val duration: Long = 0,
        val isFavorite: Boolean = false
    ) : UiState
    
    /**
     * 播放列表意图
     */
    sealed interface Intent : UiIntent {
        // 加载播放列表
        data class LoadPlaylist(val playlistId: String) : Intent
        
        // 点击歌曲
        data class ClickSong(val song: Song) : Intent
        
        // 播放控制
        object TogglePlayPause : Intent
        object PlayAll : Intent
        object NextSong : Intent
        object PreviousSong : Intent
        
        /**
         * 跳转到指定播放位置
         * 当用户拖动进度条时触发
         * @param position 目标播放位置(毫秒)
         */
        data class SeekTo(val position: Long) : Intent
        
        // 收藏操作
        object ToggleFavorite : Intent
        
        // 返回操作
        object BackClick : Intent
        
        // 点击迷你播放器
        object ClickMiniPlayer : Intent
    }
    
    /**
     * 播放列表效应
     */
    sealed interface Effect : UiEffect {
        // 返回上一页
        object NavigateBack : Effect
        
        // 显示消息
        data class ShowToast(val message: String) : Effect
        
        // 导航到播放器屏幕
        object NavigateToPlayer : Effect
    }
} 